From 87e3ebe43c29f804abf9ffda74e1c4a6574d8a18 Mon Sep 17 00:00:00 2001 From: robertl Date: Tue, 31 Aug 2004 23:07:23 +0000 Subject: [PATCH] From Chris Jones. Please find attached new files and patches for Brauniger IQ barograph support to complement the recently committed IGC format. Only tested on Linux so far. --- gpsbabel/Makefile | 2 +- gpsbabel/README | 7 + gpsbabel/README.igc | 34 + gpsbabel/brauniger_iq.c | 278 ++++ gpsbabel/guibabel | 2 +- gpsbabel/intdoc/BraunigerIQformat | 55 + gpsbabel/reference/igc1_3d.out | 123 ++ gpsbabel/reference/igc1_baro.gpx | 2563 +++++++++++++++++++++++++++++ gpsbabel/testo | 4 + gpsbabel/vecs.c | 7 + 10 files changed, 3073 insertions(+), 2 deletions(-) create mode 100644 gpsbabel/brauniger_iq.c create mode 100644 gpsbabel/intdoc/BraunigerIQformat create mode 100644 gpsbabel/reference/igc1_3d.out create mode 100644 gpsbabel/reference/igc1_baro.gpx diff --git a/gpsbabel/Makefile b/gpsbabel/Makefile index e5f3f488c..198762148 100644 --- a/gpsbabel/Makefile +++ b/gpsbabel/Makefile @@ -20,7 +20,7 @@ FMTS=magproto.o gpx.o geo.o mapsend.o mapsource.o garmin_tables.o \ xcsv.o gcdb.o tiger.o internal_styles.o easygps.o quovadis.o \ gpilots.o saroute.o navicache.o psitrex.o geoniche.o delgpl.o \ ozi.o nmea.o text.o html.o palmdoc.o netstumbler.o hsa_ndv.o \ - igc.o + igc.o brauniger_iq.o FILTERS=position.o duplicate.o arcdist.o polygon.o smplrout.o reverse_route.o sort.o diff --git a/gpsbabel/README b/gpsbabel/README index 868e40baa..714d23342 100644 --- a/gpsbabel/README +++ b/gpsbabel/README @@ -600,6 +600,13 @@ THE FORMATS representing recorded flights, and routes representing task declarations in other formats. + BAROIQ + + Serial download protocol for the Brauniger IQ series of barograph + recording flight instruments. Creates a track of altitude vs time + which can be merged with a GPS track of the same flight to create a + three dimensional IGC file. + DATA FILTERS GPSBabel supports data filtering. Data filters are invoked from diff --git a/gpsbabel/README.igc b/gpsbabel/README.igc index 9603c6936..af057a340 100644 --- a/gpsbabel/README.igc +++ b/gpsbabel/README.igc @@ -83,11 +83,45 @@ If both pressure altitude and GNSS altitude are recorded in the IGC file, two tracks will be written to the new track file, representing the two altitude tracks. The latitude, longitude and timestamps in the tracks will be identical. + +Merging into IGC format +======================= A route stored in another format can be merged with an existing IGC file that has no task declaration, to generate a new IGC file with a task declaration: gpsbabel -i igc -f myflight.igc -i gpx -f myrte.gpx -o igc -F mynew.igc +A two dimensional (lat/lon) track recorded during a flight by a GPS receiver +can be merged with a one dimensional (altitude) track recorded during the same +flight by a barograph instrument. The result is a three dimensional IGC file +representing the flight: + + gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc -F my3D.igc + +Sometimes there is a discrepancy between the internal clock in the barograph +instrument and GPS time which can result in the altitude and ground positions +not correlating correctly. This can be corrected manually by passing the time +difference in seconds between the two time domains through the "timeadj" +parameter. This can be any positive or negative integer: + + gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc,timeadj=27 -F my3D.igc + +GPSBabel can also attempt to deduce the time difference automatically. This +is done by comparing the time that it thinks that you landed on the GPS track +and the barograph and adjusting accordingly: + + gpsbabel -i gpx -f baro.gpx -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc + +The same can be acheived by downloading directly from a barograph instrument +supported by GPSBabel. For example with a Brauniger IQ Comp GPS variometer: + + gpsbabel -i baroiq -f /dev/ttyS0 -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc + +or: + + gpsbabel -i baroiq -f com1 -i igc -f my2D.igc -o igc,timeadj=auto -F my3D.igc + + Chris Jones Aug 2004 diff --git a/gpsbabel/brauniger_iq.c b/gpsbabel/brauniger_iq.c new file mode 100644 index 000000000..3ab4a2fe3 --- /dev/null +++ b/gpsbabel/brauniger_iq.c @@ -0,0 +1,278 @@ +/* + * Serial download of barograph data from a Brauniger IQ Variometer. + * + * Copyright (C) 2004 Chris Jones + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111 USA + */ + +#include "defs.h" +#include "jeeps/gpsserial.h" +#include + +static int32 fd; +static char *port; + +#define MYNAME "BRAUNIGER-IQ" +#define PRESTRKNAME "PRESALTTRK" + +static enum { + st_sync, + st_fl_num, + st_data_len, + st_ser_num, + st_pilot_name, + st_start_date, + st_start_year, + st_max_alt_1, + st_max_alt_2, + st_max_climb, + st_flight_dur, + st_log_ival, + st_start_time, + st_end_time, + st_sample_alt, + st_sample_spd, + num_states +} state; + +static const int reqd_bytes[num_states] = { 6, 1, 2, 2, 25, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1 }; + +static void rd_init(const char *fname) +{ + port = xstrdup(fname); + + // Fortunately the instruments use the same serial settings as the Garmin + // GPS receivers (9600-8-N) so we can use jeeps and hence we don't need + // to worry about OS dependencies here. + if (!GPS_Serial_On(port, &fd)) { + fatal(MYNAME ": Can't initialise port '%s'\n", port); + } +} + +static void rd_deinit(void) +{ + if (!GPS_Serial_Off(port, fd)) { + fatal(MYNAME ": Can't shut down port '%s'\n", port); + } + if (!GPS_Serial_Close(fd, port)) { + fatal(MYNAME ": Can't close port '%s'\n", port); + } + xfree(port); +} + +/** + * Process a data record. + * @return zero when all expected data has been received + */ +static int process_data(const unsigned char *data) +{ + static int remaining = 100; + static struct tm tm; + static time_t start, creation; + static route_head *track; + static unsigned char interval; + time_t finish; + waypoint *wpt = NULL; + int i; + + if (global_opts.debug_level >= 3) { + for (i = 0; i < reqd_bytes[state]; i++) { + printf("%.2x ", data[i]); + } + puts(""); + } + + remaining -= reqd_bytes[state]; + switch (state) { + case st_sync: + if (memcmp(data, "\x30\x31\x32\x33\x34\x35", 6) != 0) { + fatal(MYNAME ": Could not synchronise\n"); + } + break; + + case st_fl_num: + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Flight Number: %d\n", data[0]); + } + break; + + case st_data_len: + remaining = (data[0] << 8) + data[1] - 2; + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Data Length: %d\n", remaining); + } + break; + + case st_ser_num: + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Serial Number: %d\n", (data[0] << 8) + data[1]); + } + break; + + case st_pilot_name: + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Pilot Name: %.25s\n", data); + } + break; + + case st_start_date: + i = (data[0] << 8) + data[1]; + tm.tm_mday = i / 100; + tm.tm_mon = (i % 100) - 1; + break; + + case st_start_year: + tm.tm_year = ((data[0] << 8) + data[1]) - 1900; + break; + + case st_max_alt_1: + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Max Altitude 1: %dm\n", (data[0] << 8) + data[1]); + } + break; + + case st_max_alt_2: + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Max Altitude 2: %dm\n", (data[0] << 8) + data[1]); + } + break; + + case st_max_climb: + if (global_opts.debug_level >= 1) { + i = (data[0] << 8) + data[1]; + printf(MYNAME ": Max climb: %d.%dm/s\n", i / 10, i % 10); + } + break; + + case st_flight_dur: + if (global_opts.debug_level >= 1) { + i = (data[0] << 8) + data[1]; + printf(MYNAME ": Flight Time: %d:%d\n", i / 100, i % 100); + } + break; + + case st_log_ival: + interval = data[0]; + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Logging Interval: %ds\n", interval); + } + break; + + case st_start_time: + i = (data[0] << 8) + data[1]; + tm.tm_hour = i / 100; + tm.tm_min = (i % 100) - 1; + tm.tm_sec = 0; + creation = start = mktime(&tm); + if (global_opts.debug_level >= 1) { + printf(MYNAME ": Start Time: %s", ctime(&start)); + } + break; + + case st_end_time: + i = (data[0] << 8) + data[1]; + tm.tm_hour = i / 100; + tm.tm_min = (i % 100) - 1; + finish = mktime(&tm); + if (global_opts.debug_level >= 1) { + printf(MYNAME ": End Time: %s", ctime(&finish)); + } + if (remaining) { + track = route_head_alloc(); + track->rte_name = xstrdup(PRESTRKNAME); + track->rte_desc = xstrdup("Brauniger-IQ Barograph"); + track_add_head(track); + } else { + warning(MYNAME ": No barograph recorded for this flight\n"); + } + break; + + case st_sample_alt: + wpt = waypt_new(); + wpt->latitude = wpt->longitude = 0.0; + wpt->creation_time = creation; + creation += interval; + wpt->altitude = (data[0] << 8) + data[1]; + route_add_wpt(track, wpt); + if (global_opts.debug_level >= 2) { + printf(MYNAME ": remaining=%d, Altitude=%fm, ", remaining, wpt->altitude); + } + break; + + case st_sample_spd: + if (global_opts.debug_level >= 2) { + printf("Airspeed=%dkmh\n", data[0]); + } + state = st_sample_alt; + return remaining; + + default: + fatal(MYNAME ": Bad internal state\n"); + } + state++; + return remaining; +} + +static void data_read(void) +{ + unsigned char ibuf[25]; + int32 rd_cnt, ofs; + + if (global_opts.debug_level >= 0) { + puts(MYNAME ": Select recorded flight in memo mode."); + puts(MYNAME ": Press Memo button for two seconds..."); + } + // Wait until something arrives + while (!GPS_Serial_Wait(fd)); + if (global_opts.debug_level >= 0) { + puts(MYNAME ": Downloading flight..."); + } + // Read data until there is none left to read + state = st_sync; + ofs = 0; + do { + if (0 > (rd_cnt = GPS_Serial_Read(fd, ibuf + ofs, reqd_bytes[state] - ofs))) { + fatal(MYNAME ": Error reading port '%s', %s\n", port, strerror(errno)); + } + if (reqd_bytes[state] == rd_cnt + ofs) { + if (!process_data(ibuf)) { + if (global_opts.debug_level >= 0) { + puts(MYNAME " ...Finished"); + } + return; + } + ofs = 0; + } else { + ofs += rd_cnt; + } + } while (GPS_Serial_Wait(fd)); + fatal(MYNAME ": Incomplete download\n"); +} + +static arglist_t brauniger_iq_args[] = { + {0, 0, 0, 0} +}; + +ff_vecs_t brauniger_iq_vecs = { + ff_type_serial, + rd_init, + NULL, + rd_deinit, + NULL, + data_read, + NULL, + brauniger_iq_args +}; diff --git a/gpsbabel/guibabel b/gpsbabel/guibabel index 7872779a9..d0197df23 100755 --- a/gpsbabel/guibabel +++ b/gpsbabel/guibabel @@ -54,7 +54,7 @@ foreach i {read write} { # TODO: Get this list from 'gpsbabel -?' instead of hardcoding it here. tk_optionMenu $f.ftypes $ftype geo gpsman gpx \ magellan mapsend pcx mapsource gpsutil tiger csv xmap dna psp \ - cetus gpspilot magnav garmin mxf holux ozi tpg igc + cetus gpspilot magnav garmin mxf holux ozi tpg igc baroiq pack $f.lab -side left pack $f.ent -side left -expand yes -fill x pack $f.but -side left diff --git a/gpsbabel/intdoc/BraunigerIQformat b/gpsbabel/intdoc/BraunigerIQformat new file mode 100644 index 000000000..8dd5d2853 --- /dev/null +++ b/gpsbabel/intdoc/BraunigerIQformat @@ -0,0 +1,55 @@ +The following description was provided courtesy of the guys at Brauniger, +translated from German by Google: + + + +IQ-GPS PC data communication +============================ +Description of the sequence for the transmission of barograms IQ-GPS over the +serial interface (9600 Baud, 8, NO parity): + +All values are binary coded, with exception of the Pilot names. + +* 48, 49, 50, 51, 52, 53 (to the synchronisation) +* 1 byte flight number +* high and low - byte of the number of still following bytes +* high and low - byte of the serial number +* 25 byte pilot name (ASCII) +* high and low - byte of the starting date (e.g. 1309 for 13.09) +* high and low - byte of the starting year (e.g. 1995) +* high and low - byte of the maximum height 1 +* high and low - byte of the maximum height 2 +* high and low - byte of the maximum rise +* high and low - byte of the flying time in minutes +* 1 byte for the logging period (e.g. 5 for 5 seconds) +* high and low - byte of the starting time (e.g. 1105 for 11:05) +* high and low - byte of the stop time (e.g. 1305 for 13:05) + * for future extensions: 2 polar coordinates follow: + * Sinking value 1 (e.g. 10 = -1.0m/s) + * Speed value 1 (km/h) + * Sinking value 2 + * Speed value 2 + * 12 GPS coordinate values, binary coded as 4 byte long variable, follow + negative value mean W (S), positive value mean E (N). 0x00000000 if no + marking set was set, for 0xFFFFFFFF if marking, but no valid position. + * 4 byte Longitude 1 (MSB first) + * 4 byte Latitude 1 (MSB first) + ... + * 4 byte Longitude 12 (MSB first) + * 4 byte Latitude 12 (MSB first) +* now all heights and velocity values in the order: 2 byte for the height, 1 + byte for speed. Markings are coded in the height with an offset of 20.000 m. + + +Leimkuhler 18.02.99 + + + +I'm not sure about the "future extensions" part. My IQ-Competition/GPS doesn't +spit out those values and I believe that it has the most recent firmware. + +Also, curiously the final height/speed pair consistently omits the speed part. + + +Chris Jones +Aug 2004 diff --git a/gpsbabel/reference/igc1_3d.out b/gpsbabel/reference/igc1_3d.out new file mode 100644 index 000000000..21ff7744a --- /dev/null +++ b/gpsbabel/reference/igc1_3d.out @@ -0,0 +1,123 @@ +AXXXZZZGPSBabel +HFDTE240404 +HFPLTPILOT:CHRIS JONES +C010170000000000000000101 +C3040552S15036542EBORAH +C3040552S15036542EBORAH +C3043796S15038952EBALDWI +C3045821S15043392EMANAIR +C3045821S15043392EMANAIR +B0400193040579S15036384EA0090000000 +B0400493040614S15036317EA0093400000 +B0401193040699S15036326EA0097000000 +B0401503040629S15036431EA0099400000 +B0402203040628S15036565EA0100000000 +B0402513040689S15036431EA0098000000 +B0403223040555S15036270EA0095500000 +B0403523040720S15036356EA0091800000 +B0404233040884S15036452EA0090300000 +B0404543040658S15036419EA0088900000 +B0405243040811S15036507EA0087100000 +B0405553040688S15036378EA0084200000 +B0406263040714S15036409EA0087100000 +B0406573040686S15036391EA0089700000 +B0407283040728S15036419EA0090300000 +B0407583040656S15036366EA0090000000 +B0408293040785S15036447EA0092000000 +B0409003040822S15036433EA0097100000 +B0409313040795S15036535EA0102000000 +B0410013040809S15036573EA0100900000 +B0410323040819S15036444EA0095500000 +B0411023040785S15036304EA0095200000 +B0411323040816S15036327EA0096400000 +B0412033040846S15036397EA0097500000 +B0412343040813S15036503EA0099100000 +B0413043040760S15036508EA0096800000 +B0413353040694S15036319EA0092600000 +B0414063040538S15036152EA0091100000 +B0414373040695S15036308EA0089200000 +B0415073040758S15036421EA0091300000 +B0415383040766S15036490EA0094000000 +B0416083040753S15036493EA0094900000 +B0416393040739S15036494EA0098200000 +B0417103040750S15036527EA0096900000 +B0417413040819S15036393EA0094100000 +B0418113040806S15036352EA0091300000 +B0418413040569S15036344EA0089900000 +B0419123040526S15036253EA0090600000 +B0419433040646S15036334EA0090300000 +B0420133040794S15036367EA0089500000 +B0420443040707S15036367EA0090300000 +B0421143040678S15036423EA0092200000 +B0421443040658S15036414EA0091400000 +B0422153040772S15036358EA0091900000 +B0422453040722S15036423EA0096100000 +B0423153040717S15036457EA0098800000 +B0423453040700S15036444EA0101900000 +B0424163040689S15036457EA0104100000 +B0424473040753S15036486EA0101900000 +B0425183040750S15036329EA0099200000 +B0425483040794S15036240EA0101900000 +B0426193040688S15036353EA0108000000 +B0426493040679S15036400EA0111700000 +B0427203040754S15036332EA0113300000 +B0427513040693S15036316EA0113200000 +B0428213040918S15036288EA0108900000 +B0428513041173S15036316EA0105800000 +B0429223041467S15036406EA0100600000 +B0429523041752S15036547EA0093900000 +B0430233042022S15036681EA0089600000 +B0430543042288S15036906EA0085800000 +B0431243042359S15037048EA0087200000 +B0431553042430S15037151EA0091200000 +B0432263042348S15037228EA0094700000 +B0432573042410S15037256EA0096600000 +B0433273042612S15037247EA0094700000 +B0433583042857S15037346EA0089500000 +B0434293043064S15037635EA0085800000 +B0435003043168S15037848EA0088900000 +B0435303043193S15037985EA0092100000 +B0436013043182S15037825EA0095200000 +B0436313043184S15037915EA0099500000 +B0437023043122S15038026EA0101100000 +B0437333043136S15037990EA0103500000 +B0438033043131S15038063EA0105600000 +B0438333043209S15037994EA0104000000 +B0439043043449S15038115EA0101700000 +B0439353043669S15038384EA0099400000 +B0440053043786S15038748EA0097100000 +B0440353043743S15038849EA0097300000 +B0441053043773S15038844EA0101200000 +B0441353043804S15038931EA0103500000 +B0442053043778S15039051EA0100700000 +B0442363043815S15038859EA0098400000 +B0443073043844S15038931EA0097600000 +B0443383043886S15038927EA0099500000 +B0444093043845S15038947EA0099400000 +B0444403043904S15038862EA0099000000 +B0445113043934S15038756EA0098000000 +B0445423044092S15038774EA0095300000 +B0446133044150S15039144EA0094600000 +B0446443044370S15039248EA0094100000 +B0447153044594S15039415EA0092800000 +B0447463044804S15039714EA0089700000 +B0448163044963S15040024EA0086900000 +B0448473044982S15040431EA0083300000 +B0449183044991S15040573EA0083000000 +B0449483045154S15040808EA0081500000 +B0450193045342S15041095EA0078100000 +B0450493045484S15041383EA0075000000 +B0451193045595S15041771EA0065700000 +B0451503045744S15042205EA0055400000 +B0452213045844S15042642EA0052000000 +B0452513045936S15042952EA0051100000 +B0453213045839S15043315EA0047600000 +B0453523045915S15043559EA0045500000 +B0454233045918S15043429EA0043300000 +B0454533045933S15043539EA0037900000 +B0455243045817S15043457EA0032800000 +B0455543045823S15043438EA0033000000 +B0456253045831S15043422EA0032900000 +B0456563045845S15043414EA0033000000 +B0457193045848S15043404EA0000000000 +GGPSBabelSecurityRecordGuaranteedToFailVALIChecks diff --git a/gpsbabel/reference/igc1_baro.gpx b/gpsbabel/reference/igc1_baro.gpx new file mode 100644 index 000000000..2b208ced1 --- /dev/null +++ b/gpsbabel/reference/igc1_baro.gpx @@ -0,0 +1,2563 @@ + + + + + PRESALTTRK + Brauniger-IQ Barograph + + +829.000000 + + + +830.000000 + + + +830.000000 + + + +830.000000 + + + +830.000000 + + + +839.000000 + + + +852.000000 + + + +862.000000 + + + +870.000000 + + + +884.000000 + + + +892.000000 + + + +898.000000 + + + +899.000000 + + + +894.000000 + + + +882.000000 + + + +868.000000 + + + +871.000000 + + + +877.000000 + + + +902.000000 + + + +928.000000 + + + +950.000000 + + + +969.000000 + + + +969.000000 + + + +977.000000 + + + +983.000000 + + + +1002.000000 + + + +1016.000000 + + + +1021.000000 + + + +1021.000000 + + + +1015.000000 + + + +1013.000000 + + + +1013.000000 + + + +1013.000000 + + + +1016.000000 + + + +1005.000000 + + + +984.000000 + + + +981.000000 + + + +967.000000 + + + +962.000000 + + + +956.000000 + + + +959.000000 + + + +962.000000 + + + +970.000000 + + + +978.000000 + + + +971.000000 + + + +966.000000 + + + +958.000000 + + + +970.000000 + + + +977.000000 + + + +991.000000 + + + +1003.000000 + + + +1013.000000 + + + +1020.000000 + + + +1010.000000 + + + +1004.000000 + + + +994.000000 + + + +963.000000 + + + +958.000000 + + + +961.000000 + + + +965.000000 + + + +969.000000 + + + +952.000000 + + + +940.000000 + + + +934.000000 + + + +928.000000 + + + +932.000000 + + + +936.000000 + + + +936.000000 + + + +955.000000 + + + +982.000000 + + + +1004.000000 + + + +1017.000000 + + + +1023.000000 + + + +1036.000000 + + + +1043.000000 + + + +1041.000000 + + + +1046.000000 + + + +1037.000000 + + + +1039.000000 + + + +1036.000000 + + + +1017.000000 + + + +1005.000000 + + + +994.000000 + + + +991.000000 + + + +980.000000 + + + +958.000000 + + + +953.000000 + + + +927.000000 + + + +924.000000 + + + +916.000000 + + + +913.000000 + + + +928.000000 + + + +957.000000 + + + +980.000000 + + + +990.000000 + + + +997.000000 + + + +1009.000000 + + + +1039.000000 + + + +1057.000000 + + + +1067.000000 + + + +1056.000000 + + + +1049.000000 + + + +1036.000000 + + + +1031.000000 + + + +1027.000000 + + + +1011.000000 + + + +994.000000 + + + +993.000000 + + + +983.000000 + + + +966.000000 + + + +961.000000 + + + +958.000000 + + + +947.000000 + + + +943.000000 + + + +951.000000 + + + +947.000000 + + + +922.000000 + + + +914.000000 + + + +913.000000 + + + +920.000000 + + + +905.000000 + + + +901.000000 + + + +904.000000 + + + +903.000000 + + + +904.000000 + + + +907.000000 + + + +902.000000 + + + +901.000000 + + + +899.000000 + + + +911.000000 + + + +914.000000 + + + +901.000000 + + + +898.000000 + + + +897.000000 + + + +901.000000 + + + +908.000000 + + + +919.000000 + + + +932.000000 + + + +943.000000 + + + +958.000000 + + + +968.000000 + + + +990.000000 + + + +1009.000000 + + + +1021.000000 + + + +1029.000000 + + + +1027.000000 + + + +1004.000000 + + + +989.000000 + + + +967.000000 + + + +967.000000 + + + +979.000000 + + + +995.000000 + + + +1008.000000 + + + +1030.000000 + + + +1050.000000 + + + +1060.000000 + + + +1042.000000 + + + +1041.000000 + + + +1022.000000 + + + +1008.000000 + + + +1000.000000 + + + +994.000000 + + + +994.000000 + + + +989.000000 + + + +983.000000 + + + +982.000000 + + + +975.000000 + + + +963.000000 + + + +983.000000 + + + +996.000000 + + + +1004.000000 + + + +1005.000000 + + + +990.000000 + + + +1004.000000 + + + +993.000000 + + + +993.000000 + + + +990.000000 + + + +987.000000 + + + +987.000000 + + + +986.000000 + + + +983.000000 + + + +987.000000 + + + +977.000000 + + + +978.000000 + + + +967.000000 + + + +958.000000 + + + +954.000000 + + + +952.000000 + + + +962.000000 + + + +975.000000 + + + +1006.000000 + + + +1036.000000 + + + +1067.000000 + + + +1091.000000 + + + +1097.000000 + + + +1090.000000 + + + +1035.000000 + + + +1037.000000 + + + +1010.000000 + + + +990.000000 + + + +983.000000 + + + +972.000000 + + + +966.000000 + + + +970.000000 + + + +985.000000 + + + +995.000000 + + + +1024.000000 + + + +1051.000000 + + + +1061.000000 + + + +1098.000000 + + + +1124.000000 + + + +1140.000000 + + + +1127.000000 + + + +1128.000000 + + + +1142.000000 + + + +1150.000000 + + + +1148.000000 + + + +1131.000000 + + + +1148.000000 + + + +1165.000000 + + + +1155.000000 + + + +1162.000000 + + + +1146.000000 + + + +1137.000000 + + + +1128.000000 + + + +1120.000000 + + + +1099.000000 + + + +1076.000000 + + + +1059.000000 + + + +1061.000000 + + + +1054.000000 + + + +1058.000000 + + + +1069.000000 + + + +1074.000000 + + + +1072.000000 + + + +1089.000000 + + + +1107.000000 + + + +1122.000000 + + + +1144.000000 + + + +1156.000000 + + + +1154.000000 + + + +1155.000000 + + + +1163.000000 + + + +1169.000000 + + + +1179.000000 + + + +1188.000000 + + + +1181.000000 + + + +1171.000000 + + + +1153.000000 + + + +1142.000000 + + + +1123.000000 + + + +1103.000000 + + + +1087.000000 + + + +1067.000000 + + + +1051.000000 + + + +1041.000000 + + + +1019.000000 + + + +1015.000000 + + + +995.000000 + + + +983.000000 + + + +963.000000 + + + +951.000000 + + + +939.000000 + + + +940.000000 + + + +944.000000 + + + +944.000000 + + + +937.000000 + + + +939.000000 + + + +940.000000 + + + +945.000000 + + + +943.000000 + + + +933.000000 + + + +926.000000 + + + +924.000000 + + + +912.000000 + + + +906.000000 + + + +907.000000 + + + +901.000000 + + + +893.000000 + + + +892.000000 + + + +888.000000 + + + +882.000000 + + + +889.000000 + + + +900.000000 + + + +896.000000 + + + +881.000000 + + + +878.000000 + + + +887.000000 + + + +890.000000 + + + +888.000000 + + + +892.000000 + + + +891.000000 + + + +892.000000 + + + +888.000000 + + + +893.000000 + + + +881.000000 + + + +889.000000 + + + +883.000000 + + + +889.000000 + + + +890.000000 + + + +895.000000 + + + +900.000000 + + + +901.000000 + + + +905.000000 + + + +904.000000 + + + +893.000000 + + + +888.000000 + + + +879.000000 + + + +868.000000 + + + +857.000000 + + + +855.000000 + + + +858.000000 + + + +858.000000 + + + +858.000000 + + + +852.000000 + + + +852.000000 + + + +865.000000 + + + +861.000000 + + + +848.000000 + + + +854.000000 + + + +860.000000 + + + +862.000000 + + + +859.000000 + + + +873.000000 + + + +904.000000 + + + +929.000000 + + + +941.000000 + + + +931.000000 + + + +938.000000 + + + +938.000000 + + + +934.000000 + + + +943.000000 + + + +941.000000 + + + +942.000000 + + + +922.000000 + + + +904.000000 + + + +896.000000 + + + +878.000000 + + + +869.000000 + + + +873.000000 + + + +872.000000 + + + +874.000000 + + + +864.000000 + + + +874.000000 + + + +896.000000 + + + +898.000000 + + + +891.000000 + + + +899.000000 + + + +881.000000 + + + +885.000000 + + + +917.000000 + + + +919.000000 + + + +917.000000 + + + +926.000000 + + + +926.000000 + + + +945.000000 + + + +962.000000 + + + +971.000000 + + + +981.000000 + + + +985.000000 + + + +987.000000 + + + +1003.000000 + + + +981.000000 + + + +960.000000 + + + +939.000000 + + + +929.000000 + + + +949.000000 + + + +947.000000 + + + +945.000000 + + + +939.000000 + + + +931.000000 + + + +915.000000 + + + +909.000000 + + + +909.000000 + + + +895.000000 + + + +882.000000 + + + +882.000000 + + + +900.000000 + + + +920.000000 + + + +933.000000 + + + +963.000000 + + + +969.000000 + + + +964.000000 + + + +944.000000 + + + +942.000000 + + + +928.000000 + + + +924.000000 + + + +916.000000 + + + +908.000000 + + + +889.000000 + + + +893.000000 + + + +891.000000 + + + +898.000000 + + + +896.000000 + + + +895.000000 + + + +885.000000 + + + +883.000000 + + + +890.000000 + + + +903.000000 + + + +904.000000 + + + +906.000000 + + + +915.000000 + + + +922.000000 + + + +919.000000 + + + +931.000000 + + + +920.000000 + + + +905.000000 + + + +889.000000 + + + +892.000000 + + + +904.000000 + + + +918.000000 + + + +943.000000 + + + +953.000000 + + + +979.000000 + + + +985.000000 + + + +998.000000 + + + +1005.000000 + + + +999.000000 + + + +980.000000 + + + +981.000000 + + + +964.000000 + + + +954.000000 + + + +931.000000 + + + +916.000000 + + + +907.000000 + + + +903.000000 + + + +893.000000 + + + +889.000000 + + + +876.000000 + + + +871.000000 + + + +848.000000 + + + +841.000000 + + + +858.000000 + + + +869.000000 + + + +886.000000 + + + +896.000000 + + + +901.000000 + + + +905.000000 + + + +901.000000 + + + +902.000000 + + + +898.000000 + + + +913.000000 + + + +935.000000 + + + +959.000000 + + + +990.000000 + + + +1013.000000 + + + +1030.000000 + + + +1027.000000 + + + +990.000000 + + + +958.000000 + + + +953.000000 + + + +957.000000 + + + +949.000000 + + + +960.000000 + + + +968.000000 + + + +971.000000 + + + +979.000000 + + + +991.000000 + + + +991.000000 + + + +989.000000 + + + +958.000000 + + + +935.000000 + + + +924.000000 + + + +919.000000 + + + +909.000000 + + + +891.000000 + + + +893.000000 + + + +907.000000 + + + +915.000000 + + + +925.000000 + + + +942.000000 + + + +955.000000 + + + +949.000000 + + + +971.000000 + + + +982.000000 + + + +985.000000 + + + +971.000000 + + + +955.000000 + + + +942.000000 + + + +936.000000 + + + +915.000000 + + + +905.000000 + + + +898.000000 + + + +908.000000 + + + +906.000000 + + + +906.000000 + + + +905.000000 + + + +900.000000 + + + +897.000000 + + + +892.000000 + + + +899.000000 + + + +911.000000 + + + +919.000000 + + + +930.000000 + + + +917.000000 + + + +910.000000 + + + +912.000000 + + + +930.000000 + + + +954.000000 + + + +973.000000 + + + +987.000000 + + + +991.000000 + + + +1013.000000 + + + +1029.000000 + + + +1038.000000 + + + +1046.000000 + + + +1032.000000 + + + +1008.000000 + + + +997.000000 + + + +989.000000 + + + +1006.000000 + + + +1028.000000 + + + +1068.000000 + + + +1086.000000 + + + +1109.000000 + + + +1122.000000 + + + +1131.000000 + + + +1134.000000 + + + +1143.000000 + + + +1130.000000 + + + +1112.000000 + + + +1084.000000 + + + +1068.000000 + + + +1056.000000 + + + +1032.000000 + + + +1002.000000 + + + +966.000000 + + + +935.000000 + + + +918.000000 + + + +895.000000 + + + +872.000000 + + + +858.000000 + + + +866.000000 + + + +872.000000 + + + +890.000000 + + + +911.000000 + + + +926.000000 + + + +946.000000 + + + +960.000000 + + + +968.000000 + + + +959.000000 + + + +952.000000 + + + +930.000000 + + + +901.000000 + + + +880.000000 + + + +861.000000 + + + +852.000000 + + + +880.000000 + + + +904.000000 + + + +920.000000 + + + +923.000000 + + + +941.000000 + + + +965.000000 + + + +987.000000 + + + +1006.000000 + + + +1012.000000 + + + +1011.000000 + + + +1031.000000 + + + +1039.000000 + + + +1054.000000 + + + +1058.000000 + + + +1046.000000 + + + +1037.000000 + + + +1023.000000 + + + +1015.000000 + + + +1003.000000 + + + +991.000000 + + + +978.000000 + + + +969.000000 + + + +972.000000 + + + +974.000000 + + + +989.000000 + + + +1021.000000 + + + +1022.000000 + + + +1040.000000 + + + +1027.000000 + + + +1000.000000 + + + +976.000000 + + + +986.000000 + + + +982.000000 + + + +976.000000 + + + +983.000000 + + + +996.000000 + + + +994.000000 + + + +994.000000 + + + +986.000000 + + + +991.000000 + + + +990.000000 + + + +983.000000 + + + +965.000000 + + + +953.000000 + + + +953.000000 + + + +945.000000 + + + +949.000000 + + + +943.000000 + + + +939.000000 + + + +931.000000 + + + +925.000000 + + + +899.000000 + + + +895.000000 + + + +876.000000 + + + +862.000000 + + + +840.000000 + + + +828.000000 + + + +829.000000 + + + +831.000000 + + + +830.000000 + + + +806.000000 + + + +796.000000 + + + +774.000000 + + + +767.000000 + + + +742.000000 + + + +705.000000 + + + +633.000000 + + + +577.000000 + + + +546.000000 + + + +516.000000 + + + +522.000000 + + + +512.000000 + + + +511.000000 + + + +499.000000 + + + +471.000000 + + + +457.000000 + + + +455.000000 + + + +455.000000 + + + +432.000000 + + + +400.000000 + + + +378.000000 + + + +342.000000 + + + +328.000000 + + + +329.000000 + + + +330.000000 + + + +330.000000 + + + +329.000000 + + + +330.000000 + + + +330.000000 + + + +330.000000 + + + + + diff --git a/gpsbabel/testo b/gpsbabel/testo index 677bb9bf0..edd7186dd 100755 --- a/gpsbabel/testo +++ b/gpsbabel/testo @@ -537,6 +537,10 @@ ${PNAME} -i gpx -f ${TMPDIR}/igc.gpx -o igc -F ${TMPDIR}/igc.out sed '/^LXXXGenerated by GPSBabel Version/d' ${TMPDIR}/igc.out > ${TMPDIR}/igc_sed.out compare ${TMPDIR}/igc_sed.out reference/igc1_igc.out +${PNAME} -i gpx -f reference/igc1_baro.gpx -i igc -f reference/igc1_igc.out -o igc,timeadj=auto -F ${TMPDIR}/igc.out +sed '/^LXXXGenerated by GPSBabel Version/d' ${TMPDIR}/igc.out > ${TMPDIR}/igc_sed.out +compare ${TMPDIR}/igc_sed.out reference/igc1_3d.out + ${PNAME} -i igc -f reference/igc2.igc -o gpx -F ${TMPDIR}/igc.gpx compare ${TMPDIR}/igc.gpx reference/igc2_gpx.out diff --git a/gpsbabel/vecs.c b/gpsbabel/vecs.c index c82a96c3d..fc66634c1 100644 --- a/gpsbabel/vecs.c +++ b/gpsbabel/vecs.c @@ -66,6 +66,7 @@ extern ff_vecs_t html_vecs; extern ff_vecs_t netstumbler_vecs; extern ff_vecs_t HsaEndeavourNavigator_vecs; extern ff_vecs_t igc_vecs; +extern ff_vecs_t brauniger_iq_vecs; static vecs_t vec_list[] = { @@ -286,6 +287,12 @@ vecs_t vec_list[] = { "FAI/IGC Flight Recorder Data Format", NULL }, + { + &brauniger_iq_vecs, + "baroiq", + "Brauniger IQ Series Barograph Download", + NULL + }, { NULL, NULL, -- 2.30.2